<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 最大公约数
        //    4 6       1   2    最大的就是2

        // 方法1： 从1开始到4结束(两个数中较小的那一个)   一个一个的去找(1,2,3,4...)
        //     设置一个变量接受这个计算出来的公约数，因为是从小大到一个一个的查找的  所以找到的最后一个就是最大的
        //     不断的替换
        
        function gcd(a , b) {
            var res = 1 ;
            for(var i = 1 ; i <= Math.min(a , b) ; i++) {
                if(a % i === 0 && b % i === 0) {
                    // i 就是他们的公约数
                    res = i ;   // 不断的替换 ， 替换上一个
                }
            }
            return res ;
        }



        // 方法2：需要找最大的，可以反着找  4 3 2 1 这样反正去找，那么找到的第一个就是最大的(注意：找到了第一个之后就要立即停止)
        function gcd(a , b) {
            for(var i = Math.min(a , b) ; i >= 1 ; i--) {
                if(a % i === 0 && b % i === 0) {
                    // document.write(i) ;
                    // break ;
                    return i ;
                }
            }
        }


        // 对比：   方法2 可能提前结束  --- 会减少循环的次数
        //     两个数只有1这一个公约数的时候，两种方法的循环次数是一样的
        //     两个数除了1之外还有其他的公约数，第二种方法就会提前结束，减少循环的次数



        // 3 5    1 2 3     3次
        // 3 5    3 2 1     3次


        



        // 最小公倍数
        //    3  8     
        //    分析：8  9  10  11  12  13 ... 

        // 从两个数中较大的值开始，，一个一个的找，找到的第一个就是最小的
        // function gbs(a , b) {
        //     // 不知道啥时候结束   条件可以不写
        //     for(var i = Math.max(a , b) ; ; i++) {
        //         if(i % a === 0 && i % b === 0) {
        //             return i ;
        //         }
        //     }
        // }


        // document.write(gbs(4,6));


        // 最小公倍数
        //    3  8   
        

        // 找其中一个数的倍数  再看这个倍数能不能整除另一个数   
        //    3 6  9  12  15  18  21  24  ...
        //    8*1  16(8*2)  24(8*3) ...    
        // 找较大的这个数的倍数

        function gbs(a , b) {
            var max = Math.max(a , b) ;
            var min = Math.min(a , b) ;
            console.log(max , min) ;
            // 倍数从1
            for(var i = 1 ; ; i++) {
                // max % i 其实就是max的倍数
                // max * i 也能被min整除  就说明是也是min的倍数
                var x = max * i ;
                if(x % min === 0) {
                    return x ;
                }
            }
        }

        document.write(gbs(3,5));


       



    </script>
    
</body>
</html>